/*
target = 3
current = 3

1 2 3 1 1 1
          ^j



S = 3
1 2 3 1 1 1
[1, 2] [3] [1, 1, 1] 原来的数组 + 3 次，变成这种有 3 个分组的数组 元素的个数 - 分组的个数

1 1 1 1 1 1 6 - 6 = 0

[6]

最终我们能达成一致的这个和 S

原来的数组中必定存在着 整数个子数组 ，这些子数组的和都是 S

最少的计算步骤，达成一致。

子数组的个数越多 -> 需要的步数就越少。

[3, 3, 3]

arr = [1 2 3 1 1 1]
[1] * 6
prefixSum = 9 -> 9 是最终达成一致的那个数字么？

1 2 3 1 1 1

如果有一个任意的 6 个元素的数组，能被等和均分成 5 份的前提是

for (int i = n; i >= 1; --i) {
  if (prefixSum % i == 0) {
    // 有可能已经等分了
    // 如果数组已经被等分了，那么数组中每一个元素的值一定等于 target
    int target = prefixSum / i;

    int current = 0;
    bool isReady = true;

    for (int j = 0; j < n; ++j) {
      current += arr[j];

      if (current > target) {
        // 数组不可能在 target 上达成一致
        isReady = false;
        break; // <------
      }
      else if (current == target) {
        // 我们找到了一个子数组，它的和满足目标
        // 继续从位置j+1，找是否存在下一个满足目标的子数组
        current = 0;
      }
    }

    // 如果 isReady 还是 true
    // 原来的数组，已经可以按照某种方式分组之后，在 target 上达成一致
    // 原来的数组，在 target 上达成一致的时候，分了 i 组
    // 把原来 N 个元素的数组分成 i 组，需要在原来的数组中相加多少次？
    // n - i
    ofs << n - i << endl;
  }
  else {
    // 数组一定是需要被合并的
  }
}
*/